package sample;

/*
这个类用来连接数据库获得要显示的各种数据
*/
import java.sql.*;
import java.util.Arrays;

public class MysqlConn {
/*
==========================================================设置连接数据库的配置信息————开始=======================================================
 */
    static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://localhost:3306/scucourseman?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";

    static final String USER = "root";
    static final String PASS = "123456789ft";
    static Connection conn = null;
    static Statement stmt = null;

/*
==========================================================设置连接数据库的配置信息————结束=======================================================
 */

    //得到课表数据
    public static String[] getScheduleData(String num, String day)
    {
        String[] result=new String[10]; //某一天的课的数据
        try{
            // 注册 JDBC 驱动
            Class.forName(JDBC_DRIVER);

            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
            // 执行查询
            System.out.println(" 实例化Statement对象...");
            stmt = conn.createStatement();
            String sql;
            sql = "select distinct stu_course.c_name,cou_info.c_teacher,\n" +
                    "cou_info.c_locate,\n" +
                    "cou_loc_time.c_weekday,\n" +
                    "cou_loc_time.c_session,\n" +
                    "cou_info.c_time,\n" +
                    "cou_info.c_con_time\n"+
                    "from stu_order,stu_course,cou_info,cou_loc_time\n" +
                    "where stu_order.xuehao=" +num+"\n"+
                    "and stu_order.stu_order=stu_course.stu_order \n" +
                    "and stu_course.c_seq=cou_info.c_seq\n" +
                    "and stu_course.c_name=cou_info.c_name\n" +
                    "and cou_info.c_seq=cou_loc_time.c_seq\n" +
                    "and cou_info.c_name=cou_loc_time.c_name";
            ResultSet rs = stmt.executeQuery(sql); //执行查询语句

            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索

                String Day = rs.getString("c_weekday");
                if(Day.equals(day))
                {
                    int se=Integer.parseInt(rs.getString("c_session"));
                    String info=rs.getString("c_name")+'\n'
                            +rs.getString("c_teacher")+'\n'
                            +rs.getString("c_locate")+'\n'
                            +rs.getString("c_time").substring(2)+'\n'
                            +rs.getString("c_con_time");
                    result[se-1]=info;
                }
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        } catch(Exception se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }// 处理 Class.forName 错误
        finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException ignored){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        return result;
    }

    public static String[] getRoomSchedule(String campus,String building,String room,String day) //得到指定教室的某一天的课
    {
        String[] result=new String[10]; //某一天的课的数据
        try{
            // 注册 JDBC 驱动
            Class.forName(JDBC_DRIVER);

            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
            // 执行查询
            System.out.println(" 实例化Statement对象...");
            stmt = conn.createStatement();
            String sql;
            sql="select *\n" +
                    "from course_info_search\n" +
                    "where c_campus='"+campus+"'\n" +
                    "and c_building='"+building+"'\n" +
                    "and c_room='"+room+"'";
            ResultSet rs = stmt.executeQuery(sql); //执行查询语句

            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索

                String Day = rs.getString("c_weekday");
                if(Day.equals(day))
                {

                    String info=rs.getString("c_number")
                            +rs.getString("c_seq")+'\n'
                            +rs.getString("c_name")+'\n'
                            +rs.getString("c_teacher")+'\n'
                            +rs.getString("c_con_week")+'\n'
                            +rs.getString("c_session")+"节";
                    int se=Integer.parseInt(rs.getString("c_session").substring(0,1));
                    result[se-1]=info;
                }
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        } catch(Exception se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }// 处理 Class.forName 错误
        finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException ignored){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        return result;
    }


    public  static String[] getTeacherSchedule(String college,String name,String day)
    {
        String[] result=new String[10]; //某一天的课的数据
        try{
            // 注册 JDBC 驱动
            Class.forName(JDBC_DRIVER);

            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
            // 执行查询
            System.out.println(" 实例化Statement对象...");
            stmt = conn.createStatement();
            String sql;
            sql="select *\n" +
                    "from course_info_search\n" +
                    "where c_college='"+college+"'\n" +
                    "and c_teacher like '%"+name+"%'";
            ResultSet rs = stmt.executeQuery(sql); //执行查询语句

            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索

                String Day = rs.getString("c_weekday");
                if(Day.equals(day))
                {

                    String info=rs.getString("c_number")
                            +rs.getString("c_seq")+'\n'
                            +rs.getString("c_name")+'\n'
                            +rs.getString("c_teacher")+'\n'
                            +rs.getString("c_campus")+'\n'
                            +rs.getString("c_building")+'\n'
                            +rs.getString("c_room")+'\n'
                            +rs.getString("c_con_week")+'\n'
                            +rs.getString("c_session")+"节";
                    int se=Integer.parseInt(rs.getString("c_session").substring(0,1));
                    result[se-1]=info;
                }
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        } catch(Exception se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }// 处理 Class.forName 错误
        finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException ignored){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        return result;
    }


    public static String[] getCourseListOnly(String num)
    {
        String[] result=new String[30]; //某一天的课的数据
        int i=0;
        try{
            // 注册 JDBC 驱动
            Class.forName(JDBC_DRIVER);

            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
            // 执行查询
            System.out.println(" 实例化Statement对象...");
            stmt = conn.createStatement();
            String sql;
            sql="select stu_course.c_name\n" +
                    "from stu_order,stu_course\n" +
                    "where stu_order.xuehao='"+num+"'\n" +
                    "and stu_order.stu_order=stu_course.stu_order";
            ResultSet rs = stmt.executeQuery(sql); //执行查询语句

            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                String info=rs.getString("c_name");
                result[i++]=info;
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        } catch(Exception se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }// 处理 Class.forName 错误
        finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException ignored){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        return result;
    }

    public static String[][] getContent (String num,String course_name)
    {
        String[][] result=new String[20][3]; //记录课程笔记的数组
        int i=0;
        try{
            // 注册 JDBC 驱动
            Class.forName(JDBC_DRIVER);

            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
            // 执行查询
            System.out.println(" 实例化Statement对象...");
            stmt = conn.createStatement();
            String sql;
            sql="select stu_note.n_order,stu_note.note_title,stu_note.n_content\n" +
                    "from stu_order,stu_note\n" +
                    "where stu_order.xuehao='"+num+"' and stu_order.stu_order=stu_note.stu_order\n" +
                    "and stu_note.course_name='"+course_name+"'";
            ResultSet rs = stmt.executeQuery(sql); //执行查询语句

            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                result[i][0]=rs.getString("n_order");
                result[i][1]=rs.getString("note_title");
                result[i][2]=rs.getString("n_content");
                i++;
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        } catch(Exception se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }// 处理 Class.forName 错误
        finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException ignored){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        return result;

    }

    public static int addNote(String num,String coursename,String title,String content)
    { //首先计算表里边有几个该学生在该课程的笔记，得到序号，然后执行插入操作

        int count = 0;
        String stuo = "";
        int r=0;

        try{
            // 注册 JDBC 驱动
            Class.forName(JDBC_DRIVER);

            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
            // 执行查询
            System.out.println(" 实例化Statement对象...");
            stmt = conn.createStatement();
            String sql;
            //首先计算表里有多少个该学生在该课程下笔记的数量
            sql="select count(*) ,stu_order.stu_order\n" +
                    "from stu_note,stu_order\n" +
                    "where stu_order.xuehao='"+num+"'\n" +
                    "and stu_order.stu_order=stu_note.stu_order\n" +
                    "and stu_note.course_name='"+coursename+"'";
            ResultSet rs = stmt.executeQuery(sql); //执行查询语句

            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                String info=rs.getString("count(*)");
                stuo=rs.getString("stu_order");
                count=Integer.parseInt(info);
            }

            if(stuo==null)
            {
                sql="select stu_order.stu_order\n" +
                        "from stu_order\n" +
                        "where xuehao='"+num+"'";
                rs = stmt.executeQuery(sql); //执行查询语句
                while(rs.next()){
                    // 通过字段检索
                    stuo=rs.getString("stu_order");
                }
            }
            count=count+1;
            String ccc=Integer.toString(count); //得到要插入的序号

            sql="insert into stu_note values ('"+ccc+"','"+title+"','"+content+"','"+coursename+"','"+stuo+"')";
            stmt.executeUpdate(sql);

            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
            r=1;

        } catch(Exception se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }// 处理 Class.forName 错误
        finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException ignored){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
       return r;
    }

    public static int deleteNote(String num,String coursename,String index) //删除学生的笔记
    {

        int r=0;

        String stuo = "";
        try{
            // 注册 JDBC 驱动
            Class.forName(JDBC_DRIVER);

            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
            // 执行查询
            System.out.println(" 实例化Statement对象...");
            stmt = conn.createStatement();
            String sql;
            sql="select stu_order.stu_order\n" +
                    "from stu_order\n" +
                    "where xuehao='"+num+"'";
            ResultSet rs = stmt.executeQuery(sql); //执行查询语句
            while(rs.next()){
                // 通过字段检索
                stuo=rs.getString("stu_order");
            }
            sql="delete \n" +
                    "from stu_note\n" +
                    "where stu_order= '"+stuo+"'\n" +
                    "and course_name='"+coursename+"' \n" +
                    "and n_order='"+index+"'";
            stmt.executeUpdate(sql);
            sql="update stu_note\n" +
                    "set n_order=n_order-1\n" +
                    "where stu_order= '"+stuo+"'\n" +
                    "and course_name='"+coursename+"'and n_order>'"+index+"'\n";
            stmt.executeUpdate(sql);

            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
            r=1;
        } catch(Exception se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }// 处理 Class.forName 错误
        finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException ignored){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        return r;

    }

    public static void main(String[] args) {

    }

}
